package com.dqyt.lhq.service;

import com.dqyt.app.bean.ReportLhq;
import com.dqyt.app.bean.Sample;
import com.dqyt.app.mongo.ReportLhqDao;
import com.dqyt.common.check.CheckTool;
import com.dqyt.common.constant.AuthorityID;
import com.dqyt.common.constant.Opt;
import com.dqyt.common.utils.UserInfoUtil;
import com.dqyt.khjc.bean.HistoryBean;
import com.dqyt.khjc.bean.RespPageBean;
import com.dqyt.khjc.bean.ResultMsg;
import com.dqyt.khjc.bean.User;
import com.dqyt.khjc.config.Config;
import com.dqyt.khjc.swicth.SwitchConfig;
import com.dqyt.khjc.utils.IpUtil;
import com.dqyt.khjc.utils.TimeUtil;
import com.dqyt.quart.AddSimpleJobReq;
import com.dqyt.quart.DeleteJobReq;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 */
@Service
public class LhqReportePcService {


    @Autowired
    private ReportLhqDao reportLhqDao;

    /**
     *
     * @param request
     * @param pageNum
     * @param pageSize
     * @param jlbh  记录编号
     * @param ccbh  标识编号
     * @param reportStatue  报告状态
     * param reportProgress 报告进度
     * @return
     */
    public ResultMsg getLhqReoprtListPage(HttpServletRequest request, Integer pageNum, Integer pageSize, String jlbh, String ccbh, String jlrIdStr, int reportStatue,
                                          int reportProgress){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            if (pageNum != null && pageSize != null) {
                pageNum = (pageNum - 1) * pageSize;
            }

            //分页查询数据
            List<ReportLhq>  samples =  reportLhqDao.getReoprtListPage(pageNum, pageSize, jlbh,ccbh,jlrIdStr, reportStatue,reportProgress);
            //查询总条数
            long  total = reportLhqDao.getReoprtListTotle(jlbh,ccbh,jlrIdStr, reportStatue,reportProgress);
            RespPageBean bean = new RespPageBean();
            bean.setData(samples);
            bean.setTotal(total);
            ret.setCode(ResultMsg.SUCESS);
            ret.setData(bean);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;


    };



    /**
     *
     * @param request
     * @param pageNum
     * @param pageSize
     * @param jlbh  记录编号
     * @param ccbh  标识编号
     * @param reportStatue  报告状态
     * param reportProgress 报告进度
     * @return
     */
    public ResultMsg getLhqMeReoprtListPage(HttpServletRequest request, Integer pageNum, Integer pageSize, String jlbh, String ccbh, int reportStatue,
                                          int reportProgress){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            if (pageNum != null && pageSize != null) {
                pageNum = (pageNum - 1) * pageSize;
            }

            if(null == user){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("登录过期");
            }

            //分页查询数据
            List<ReportLhq>  samples =  reportLhqDao.getReoprtMeListPage(pageNum, pageSize, jlbh,ccbh,user.getUserId()+"", reportStatue,reportProgress);
            //查询总条数
            long  total = reportLhqDao.getReoprMetListTotle(jlbh,ccbh,user.getUserId()+"", reportStatue,reportProgress);
            RespPageBean bean = new RespPageBean();
            bean.setData(samples);
            bean.setTotal(total);
            ret.setCode(ResultMsg.SUCESS);
            ret.setData(bean);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;


    };



    /**
     *
     * @param request
     * @param pageNum
     * @param pageSize
     * @param jlbh  记录编号
     * @param ccbh  标识编号
     * @param reportStatue  报告状态
     * param reportProgress 报告进度
     * @return
     */
    public ResultMsg getLhqPzReoprtListPage(HttpServletRequest request, Integer pageNum, Integer pageSize, String jlbh, String ccbh, int reportStatue,
                                            int reportProgress){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            if (pageNum != null && pageSize != null) {
                pageNum = (pageNum - 1) * pageSize;
            }

            if(null == user){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("登录过期");
            }

            //分页查询数据
            List<ReportLhq>  samples =  reportLhqDao.getReoprtPzListPage(pageNum, pageSize, jlbh,ccbh,"", reportStatue,reportProgress);
            //查询总条数
            long  total = reportLhqDao.getReoprPztListTotle(jlbh,ccbh,"", reportStatue,reportProgress);
            RespPageBean bean = new RespPageBean();
            bean.setData(samples);
            bean.setTotal(total);
            ret.setCode(ResultMsg.SUCESS);
            ret.setData(bean);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;


    };




    /**
     * 删除报告
     * @return
     */
    public ResultMsg mdelBGHgLhq(HttpServletRequest request,String bh){
        ResultMsg ret = new ResultMsg();
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);


            if("".equals(bh)){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("非法操作");
                return ret;
            }
            long count =  reportLhqDao.deleteByBh(bh);

//            //报告删除了之后 要去吧样品里面的  不合格原因，样品状态都从新改一下
//            Sample  xsample =  mSampleDao.getSampleById(bsbh);
//            if(null != xsample){
//                xsample.sampleStatue = 2;
//                xsample.bhgyy ="";
//                mSampleDao.save(xsample);
//            }

            if(count>0){
                ret.setCode(ResultMsg.SUCESS);
                ret.setMsg("删除成功");
                return ret;
            }else{
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("数据异常");
                return ret;
            }



        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }






    /**
     * 修改报告的进度
     *
     * @param request
     * @param bh
     * @param reportProgress
     * @return
     */
    public ResultMsg srtLhqReportProgress(HttpServletRequest request, String bh, int reportProgress) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
            if (!CheckTool.checkAuthority(user, AuthorityID.BGGL_WDBG)) {
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("你没有对应的操作权限");
                return ret;
            }
            //先查询老的报告
            ReportLhq report = reportLhqDao.getReportByBH(bh);
            report.reportProgress = reportProgress;
            //清除驳回理由
            report.bhyy = "";
            long time = TimeUtil.getCurrentTimeMillis();

            reportLhqDao.save(report);
            ret.setCode(ResultMsg.SUCESS);

        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }



    /**
     *
     * @param request
     * @param pageNum
     * @param pageSize
     * @param jlbh  记录编号
     * @param ccbh  标识编号
     * @param reportStatue  报告状态
     * param reportProgress 报告进度
     * @return
     */
    public ResultMsg getLhqMeReoprtListPage2(HttpServletRequest request, Integer pageNum, Integer pageSize, String jlbh, String ccbh, int reportStatue,
                                            int reportProgress){
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            if (pageNum != null && pageSize != null) {
                pageNum = (pageNum - 1) * pageSize;
            }

            if(null == user){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("登录过期");
            }

            //分页查询数据
            List<ReportLhq>  samples =  reportLhqDao.getReoprtMeListPage(pageNum, pageSize, jlbh,ccbh,"", reportStatue,reportProgress);
            //查询总条数
            long  total = reportLhqDao.getReoprMetListTotle(jlbh,ccbh,"", reportStatue,reportProgress);
            RespPageBean bean = new RespPageBean();
            bean.setData(samples);
            bean.setTotal(total);
            ret.setCode(ResultMsg.SUCESS);
            ret.setData(bean);
        }catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;


    };







    /**
     * 驳回报告
     *
     * @param request
     * @return
     */
    public ResultMsg rejectLhqReportDal(HttpServletRequest request, String bh,  int reportProgress, String bhgyy) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            // 用户权限检查 是否有客户信息一览的权限
            if (!CheckTool.checkAuthority(user, AuthorityID.BGGL_DJYBG)
                    && !CheckTool.checkAuthority(user, AuthorityID.BGGL_DPZBG)
                    && !CheckTool.checkAuthority(user, AuthorityID.BGGL_DSHBG)) {

                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("你没有对应的操作权限");
                return ret;
            }
            //先查询老的报告
            ReportLhq report = reportLhqDao.getReportByBH(bh);
            report.reportProgress = reportProgress;
            //任何情况被驳回都要清除  审核员和 批准员
            report.pzrId="";
            report.pzr="";
            report.hyyId = "";
            report.hyy = "";
            //驳回原因
            report.bhyy = bhgyy;
            reportLhqDao.save(report);
            ret.setCode(ResultMsg.SUCESS);
            ret.setMsg("成功");

        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }


    /**
     * 报告通过审核
     *
     * @param request
     * @param bh
     * @return
     */
    public ResultMsg reportAdoptLhqExamine(HttpServletRequest request, String bh) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            if(null == user){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("请登录");
                return ret;
            }
            if(0 == user.getSealId()){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("你还没有电子签章");
                return ret;
            }
            //先查询老的报告
            ReportLhq report = reportLhqDao.getReportByBH(bh);
            //设报告的进度为待审批
            report.reportProgress = 3;
            //设置核验员的id为自己的id
            report.hyyId = String.valueOf(user.getUserId());
            report.hyy = user.getUserName();
            long time = TimeUtil.getCurrentTimeMillis();
            reportLhqDao.save(report);
            ret.setCode(ResultMsg.SUCESS);
        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }




    /**
     * 报告通过 批准
     *
     * @param request
     * @param bh
     * @return
     */
    public ResultMsg reportLhqAdoptApproval(HttpServletRequest request, String bh) {
        ResultMsg ret = new ResultMsg(); // 声明一个返回值
        try {
            // 检查用户是否登录Token是否正确
            ret = UserInfoUtil.isAuthori_Web(request);
            // 如果有错误信息
            if (ret != null) {
                return ret;
            }
            ret = new ResultMsg(); // 声明一个返回值
            // 权限检查
            // 首先取得用户信息
            User user = UserInfoUtil.getUser_Web(request);
            //先查看用户有没有设置签章
            if(0 == user.getSealId()){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("你还没有电子签章");
                return ret;
            }
            if(null == user){
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("请登录");
                return ret;
            }
            // 用户权限检查 是否有客户信息一览的权限
            if (!CheckTool.checkAuthority(user, AuthorityID.BGGL_DPZBG)) {
                ret.setCode(ResultMsg.ERROR);
                ret.setMsg("你没有对应的操作权限");
                return ret;
            }
            //先查询老的报告
            ReportLhq report = reportLhqDao.getReportByBH(bh);
            //设置核验员的id为自己的id
            report.pzrId = String.valueOf(user.getUserId());
            report.pzr = user.getUserName();
            long time = TimeUtil.getCurrentTimeMillis();
            //设报告的进度为 已完成
            report.reportProgress = 4;
            reportLhqDao.save(report);
            ret.setCode(ResultMsg.SUCESS);
        } catch (Exception e) {
            ret.setCode(ResultMsg.ERROR);
            ret.setMsg("未知的错误，请稍候再试！");
            e.printStackTrace();
        }
        return ret;
    }



}
